package com.ruoyi.order.service;

import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.order.domain.OrderGoods;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 商品订单 业务层
 * 
 * @author ruoyi
 */
public interface IOrderGoodsService
{
    /**
     * 根据条件分页查询商品订单列表
     * 
     * @param orderGoods 商品订单信息
     * @return 商品订单信息集合信息
     */
    public List<OrderGoods> selectOrderGoodsList(OrderGoods orderGoods);

    /**
     * 通过订单编号查询商品订单
     * 
     * @param orderNo 订单编号
     * @return 商品订单对象信息
     */
    public OrderGoods selectOrderGoodsByOrderNo(String orderNo);

    /**
     * 查询商品订单总数汇总 - 条数
     *
     * @param orderGoods 商品订单信息
     * @return 商品订单对象信息
     */
    public int selectOrderGoodsCountTotal(OrderGoods orderGoods);

    /**
     * 查询商品订单每日新增总数 - 条数
     *
     * @param orderGoods 商品订单信息
     * @return 商品订单对象信息
     */
    public List<Map<String, Object>> selectOrderGoodsCountDaily(OrderGoods orderGoods);

    /**
     * 查询商品订单总数汇总 - 金额
     *
     * @param orderGoods 商品订单信息
     * @return 商品订单对象信息
     */
    public BigDecimal selectOrderGoodsAmountTotal(OrderGoods orderGoods);

    /**
     * 查询商品订单每日新增总数 - 金额
     *
     * @param orderGoods 商品订单信息
     * @return 商品订单对象信息
     */
    public List<Map<String, Object>> selectOrderGoodsAmountDaily(OrderGoods orderGoods);

    /**
     * 查询店员在待服务和服务中的订单数量
     *
     * @param employeeUserId 店员ID
     * @return 结果
     */
    public Integer countOrderGoodsByEmployeeId(Long employeeUserId);

    /**
     * 新增商品订单信息
     * 
     * @param orderGoods 商品订单信息
     * @return 结果
     */
    public OrderGoods insertOrderGoods(OrderGoods orderGoods);

    /**
     * 修改商品订单信息
     * 
     * @param orderGoods 商品订单信息
     * @return 结果
     */
    public int updateOrderGoods(OrderGoods orderGoods);

    /**
     * 完成商品订单信息
     *
     * @param orderNo d订单号
     * @return 结果
     */
    public AjaxResult finishOrderGoods(String orderNo);

    /**
     * 取消商品订单信息
     *
     * @param orderGoods 商品订单信息
     * @return 结果
     */
    public int cancelOrderGoods(OrderGoods orderGoods);

    /**
     * 修改商品订单状态
     * 
     * @param orderGoods 商品订单信息
     * @return 结果
     */
    public int updateOrderGoodsStatus(OrderGoods orderGoods);

    /**
     * 修改商品订单评价状态
     *
     * @param orderGoods 商品订单信息
     * @return 结果
     */
    public int updateOrderGoodsIsRate(OrderGoods orderGoods);

    /**
     * 修改商品订单支付状态
     *
     * @param orderGoods 商品订单信息
     * @return 结果
     */
    public int updateOrderGoodsPayStatus(OrderGoods orderGoods);

    /**
     * 修改商品订单接单状态
     *
     * @param orderGoods 商品订单信息
     * @return 结果
     */
    public int updateOrderGoodsIsAccept(OrderGoods orderGoods);


    // 客户财务中心
    public void customerFinanceCenter(OrderGoods orderGoods, String financeType);


    // 订单超时提醒
    public void updateOrderGoodsOvertimeNotice();


    // 订单超时取消
    public void updateOrderGoodsOvertimeCancel();

    // 完成支付
    public void finishPay(OrderGoods orderGoods);

    /**
     * 通过订单编号删除商品订单
     * 
     * @param orderNo 订单编号
     * @return 结果
     */
    public int deleteOrderGoodsByOrderNo(String orderNo);

    /**
     * 批量删除商品订单信息
     * 
     * @param orderNos 需要删除的订单编号
     * @return 结果
     */
    public int deleteOrderGoodsByOrderNos(String[] orderNos);
}
